home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / mac / LOGIC Apple II 5.25" Library - ProDOS / PRO004.dsk / MAIN.bas < prev    next >
BASIC Source File  |  2012-02-16  |  17KB  |  425 lines

  1. 10  REM  FILE CABINET-PRODOS
  2. 15 :
  3. 20  REM  PRINTER SETUP FOR EPSON
  4. 40  REM  MAY 1984 UPDATE BY
  5. 50  REM  MICHAEL MOORE
  6. 60 :
  7. 70  REM  APPLE CORPS OF DALLAS
  8. 80 :
  9. 90  REM  <<< MAIN MODULE >>>
  10. 100 :
  11. 210  IF MS >0  AND MS <9 GOTO 28010: REM   RETURN FROM SUBPROGRAM
  12. 310 DB$ = "":FD$ = "": ONERR  GOTO 13010
  13. 500  REM  <<< INTRO TITLE >>>>
  14. 501  TEXT : HOME 
  15. 502  VTAB 5: HTAB 13: INVERSE : PRINT "FILE CABINET"
  16. 505  PRINT 
  17. 510  HTAB 12: PRINT "PRODOS VERSION"
  18. 515  PRINT 
  19. 520  HTAB 11: PRINT "BY MICHAEL MOORE"
  20. 525  PRINT 
  21. 530  HTAB 14: PRINT " MAY  1984"
  22. 540  NORMAL 
  23. 600  REM    <<<<< PRODOS DATE SET >>> 
  24. 610 DD =  PEEK(49040) - INT( PEEK(49040)/32) *32
  25. 620  IF DD < >0 GOTO 1000: REM      SKIP DATE SETUP IF NOT NEEDED 
  26. 630  VTAB 13: CALL  -958: REM  CLEAR TO BOTTOM 
  27. 640  PRINT "   DATE INPUT ROUTINE": PRINT 
  28. 645  VTAB 15: CALL  -868
  29. 650  INPUT "ENTER NUMBER OF CURRENT MONTH      : ";MM
  30. 655  IF MM <0  OR MM >12 GOTO 645
  31. 657  VTAB 16: CALL  -868
  32. 660  INPUT "ENTER NUMBER OF CURRENT DAY        : ";DD
  33. 665  IF DD <0  OR DD >31 GOTO 657
  34. 667  VTAB 17: CALL  -868
  35. 670  INPUT "ENTER LAST TWO DIGITS OF THE YEAR  : ";YY
  36. 675  IF YY <0  OR YY >99 GOTO 667
  37. 680  POKE 49041,YY *2 +(MM >7)
  38. 690  IF MM >7  THEN  POKE 49040,(MM -8) *32 +DD
  39. 700  IF MM <8  THEN  POKE 49040,MM *32 +DD
  40. 710  PRINT : GOSUB 60110
  41. 720  PRINT "THE DATE ENTERED IS "
  42. 730  HTAB 25: PRINT TD$: PRINT 
  43. 740 L$ = "IS THIS CORRECT? ": GOSUB 2510
  44. 750  IF   NOT YES GOTO 630
  45. 810  GOTO 1000
  46. 900  REM <<< SCREEN DISPLAY WHILE ACCESSING DISK  >>>
  47. 910  VTAB 22: CALL  -868: HTAB 4: INVERSE : PRINT "LOADING :";: NORMAL : PRINT "   ";L$
  48. 920  RETURN 
  49. 1000  POKE 216,0: GOTO 3010
  50. 2000  REM  <<< PRINTER SETUP >>>
  51. 2010  PRINT D$;"PR#1": PRINT  CHR$(18);: PRINT  CHR$(27) + CHR$(70);
  52. 2020  ON PF GOTO 2030,2050
  53. 2030  PRINT  CHR$(9)"80N";: PRINT  CHR$(27) + CHR$(69): RETURN 
  54. 2050  PRINT  CHR$(9)"132N";: CHR$(15);: RETURN 
  55. 2090  REM  <<< OPPORTUNITY TO TURN ON PRINTER IF FORGOTTEN >>> 
  56. 2100  PRINT :L$ = "PRINT SET-UP CORRECT ": GOSUB 2510: IF YES = 1  THEN  GOTO 2110
  57. 2105  IF YES = 0  THEN  POP : GOTO 28010
  58. 2110  PRINT : INVERSE : PRINT  TAB( 10);"TURN YOUR PRINTER ON"; SPC( 10)" ": NORMAL : PRINT 
  59. 2120  INPUT "PRESS <RETURN> WHEN READY...";R$: RETURN 
  60. 2400  REM  <<<< ENTER NUMBER CHOSEN >>>
  61. 2410  PRINT L$"->":V =  PEEK(37)::H =  LEN(L$) +3
  62. 2420  VTAB V: HTAB H: CALL  -868: INPUT "";R$:R =  VAL(R$): CALL  -958
  63. 2440  PRINT : RETURN 
  64. 2500  REM  << ENTER YES / NO >>>>
  65. 2510 V =  PEEK(37) +1
  66. 2515  PRINT L$" (Y/N)"
  67. 2520  IF V >23  THEN V = 23
  68. 2530  VTAB V: HTAB ( LEN(L$) +8): CALL  -868: INPUT A$: IF A$ = "Y"  THEN YES = 1: RETURN 
  69. 2540  IF A$ = "N"  THEN YES = 0: RETURN 
  70. 2550  INVERSE : PRINT " PRESS 'Y' OR 'N'...": NORMAL : IF V =  >23  THEN V = 22
  71. 2560  GOTO 2530
  72. 3000  REM  <<<<CTRL-J>
  73. 3010  REM  << STARTUP >>>
  74. 3040  GOSUB 32010: REM SETUP POKES
  75. 3045  GOSUB 34000: REM SETUP POKES
  76. 3050  CLEAR 
  77. 3060  DIM R$(65),AC(21),K(66),H$(21),RN$(21)
  78. 3070  DIM L%(21)
  79. 3071 D$ =  CHR$(4)
  80. 3072  PRINT D$;"PREFIX"
  81. 3073  INPUT PX$: REM  OBTAIN PATH OF CURRENT DISK
  82. 3075  GOSUB 60110: REM SETUP DATE AFTER CLEAR
  83. 3080 PB$ = PX$: REM  SET PATH FOR DATA ACCESS 
  84. 3085  GOTO 35010: REM  DETERMINE PATH FOR DATA BASE  
  85. 3090 H$(0) = "REC#"
  86. 3100 DB$ = "":FD$ = "": ONERR  GOTO 13010
  87. 3105  PRINT D$"VERIFY"PB$ +"BASENAMES"
  88. 3110  GOSUB 23010
  89. 3120  GOTO 13010
  90. 4000  REM  <<< GET FILE >>>
  91. 4010 F$ = "HEADER": ONERR  GOTO 6010
  92. 4015  PRINT D$"VERIFY"PB$ +FD$ +"/" +F$
  93. 4020  GOSUB 23010
  94. 4100  FOR I = 1 TO NR:H$(I) = R$(I):L%(I) =  LEN(R$(I)): NEXT I
  95. 4110 NH = NR:NR = 0:MEM =  FRE(0)
  96. 4120 B =  INT((MEM -16)/(18 *NH +8))
  97. 4130  DIM N$(B,NH),R(B),S(B)
  98. 4140 F$ = "INDEX": ONERR  GOTO 28100
  99. 4150  GOSUB 23010
  100. 4160  GOTO 28010
  101. 5400  REM  <<< GOTO SORT ROUTINE >>>
  102. 5410 L$ = "SORT SUBROUTINE": GOSUB 910
  103. 5420  PRINT D$;"CHAIN";PX$ +"SORT"
  104. 6000  REM  <<< ENTER HEADERS >>>
  105. 6010  CALL 1013
  106. 6020  POKE 216,0
  107. 6030 NR = 1
  108. 6032  HOME 
  109. 6035  PRINT "HEADERS FOR <"DB$"> DATA BASE": PRINT 
  110. 6036  PRINT  TAB( 10)"MAXIMUM 20 HEADERS"
  111. 6037  PRINT " HEADER NAMES MAXIMUM 15 CHARACTERS"
  112. 6040  PRINT : PRINT "AFTER LAST HEADER, PRESS <RETURN> TO    EXIT TO MAIN MENU"
  113. 6050  PRINT 
  114. 6060  PRINT "HEADER NAME FOR COLUMN #"NR": ";: CALL 768,R$(NR)
  115. 6065  IF R$(1) = "" GOTO 6010
  116. 6070  IF R$(NR) = ""  OR NR >20  THEN 6110
  117. 6080 L%(NR) =  LEN(R$(NR))
  118. 6090 NR = NR +1
  119. 6100  GOTO 6060
  120. 6110 NR = NR -1
  121. 6120  IF NR <1  THEN FLAG = 1: GOTO 14010: REM    FLAG TO CAUSE JUMP IN SUB PROGRAM 'FILES' 
  122. 6130  GOSUB 24010: GOTO 4100
  123. 7000  REM  <<< DATA ENTRY >>>
  124. 7010  HOME 
  125. 7020  PRINT "THERE ARE NOW "NR" RECORDS"
  126. 7030  PRINT "IN THE >"DB$"< DATA FILE"
  127. 7040  HOME :NR = NR +1:R(NR) = NR
  128. 7050  PRINT "YOU ARE ENTERING RECORD # "NR
  129. 7060  PRINT "HIT '/' TO USE LAST RECORD'S ANSWER"
  130. 7070  PRINT 
  131. 7080  FOR I = 1 TO NH
  132. 7090  PRINT H$(I)":";: CALL 768,N$(NR,I)
  133. 7100  IF N$(NR,I) =  CHR$(47)  THEN N$(NR,I) = N$(NR -1,I): PRINT N$(NR,I)
  134. 7110 L =  LEN(N$(NR,I)): IF L >L%(I)  THEN L%(I) = L
  135. 7120  NEXT I
  136. 7130  PRINT 
  137. 7140 L$ = "MORE ": GOSUB 2510: IF YES  THEN  GOTO 7040
  138. 7150 F$ = "INDEX"
  139. 7160  GOSUB 24010
  140. 7170  GOTO 28010
  141. 8000  REM  <<< GOTO SEARCH ROUTINE >>>
  142. 8010 L$ = "CHANGE SUBROUTINE": GOSUB 910
  143. 8020  PRINT D$;"CHAIN";PX$ +"CHANGE"
  144. 9000  REM  <<< ABORT SUBROUTINE >>>
  145. 9010  IF (PF)  OR (AR)  THEN 9030
  146. 9020  PRINT "PRESS RETURN TO CONTINUE, ESC TO ABORT";: GOTO 9050
  147. 9030 LF =  PEEK( -16384): POKE  -16368,0
  148. 9040  ON LF = 141 GOTO 9050: ON LF = 155 GOTO 9070: GOTO 9090
  149. 9050 LF =  PEEK( -16384): IF LF <128  THEN 9050
  150. 9060  POKE  -16368,0
  151. 9070  IF LF = 155  THEN LF = 1: GOTO 9100
  152. 9080  IF LF < >141  THEN 9050
  153. 9090 LF = 0
  154. 9100  IF PF = 0  AND AR = 0  THEN  PRINT :L = 0: HOME 
  155. 9110  RETURN 
  156. 11000  REM  <<< GOTO REPORT >>>
  157. 11010 LT = 60: IF PF  AND L = 0  THEN  PRINT  TAB( 8);FD$" DATA BASE";: POKE 36, LEN(FD$) +20: PRINT TD$: PRINT :L = L +2
  158. 11015  PRINT  TAB( 4 +5 *(PF >1))H$(0);J
  159. 11020  FOR I = 1 TO NH
  160. 11030  POKE 36,5 *(PF >0) +1: PRINT I" "H$(I)":";: POKE 36,X +5 *(PF >0) +5: PRINT N$(Y,I)
  161. 11040  NEXT I
  162. 11050  PRINT 
  163. 11060 L = L +NH +2
  164. 11070  IF PF  AND (L +NH) >(LT -1)  THEN  PRINT  CHR$(12):L = 0
  165. 11080  RETURN 
  166. 12000  REM  <<< DELETE RECORDS >>>
  167. 12010  HOME : PRINT "ENTER 0 TO RETURN TO THE MENU!":I = 0
  168. 12020  VTAB 7: CALL  -958: INPUT "ENTER RECORD NUMBER TO DELETE -> ";S$:S =  VAL(S$): IF I = 0  AND S$ = "0"  THEN 28010
  169. 12025  IF S$ = "END"  THEN 12065
  170. 12030  IF S <1  OR S >NR  THEN 12020
  171. 12040 R(S) = 0:I = I +1: IF I = NR  THEN FLAG = 1: GOTO 14010: REM  FLAG TO CAUSE JUMP IN SUB PROGRAM 'FILES'  
  172. 12050  PRINT : PRINT "RECORD NUMBER "S" DELETED!": PRINT 
  173. 12060 L$ = "MORE ": GOSUB 2510: IF YES  THEN  HOME : PRINT "TYPE 'END' TO TERMINATE DELETIONS!": GOTO 12020
  174. 12065 I = 1:J = 0
  175. 12070  IF R(I) = 0  THEN 12090
  176. 12080 J = J +1:R(J) = R(I)
  177. 12090 I = I +1: ON I >NR GOTO 12095: GOTO 12070
  178. 12095  HOME : VTAB 7: HTAB 13: FLASH : PRINT "<HOUSEKEEPING>": NORMAL : PRINT 
  179. 12097  PRINT : PRINT : PRINT NR" RECORDS BEING RE-NUMBERED...."
  180. 12100  IF J = 0  THEN FLAG = 1: GOTO 14010: REM   SET FLAG TO CAUSE JUMP IN SUB PROGRAM 'FILES"  
  181. 12110  VTAB 15: PRINT "ONE MINUTE PLEASE...":NR = J:F$ = "INDEX": GOSUB 24010: GOSUB 23010: GOTO 28010
  182. 13000  REM  <<< INITIAL MENU >>>
  183. 13010  HOME 
  184. 13011  VTAB 5: HTAB 10: PRINT "FILE CABINET-PRODOS": PRINT 
  185. 13012  PRINT  TAB( 6)"UPDATED BY MICHAEL MOORE": PRINT 
  186. 13013  PRINT "INFORMATION STORAGE AND RETRIEVAL SYSTEM"
  187. 13015  PRINT : HTAB 3
  188. 13019  POKE 216,0: REM  RESET ERROR INDICATOR
  189. 13020  PRINT "SELECT FROM:": PRINT 
  190. 13030  IF   NOT NR  THEN J = 1: GOTO 13050
  191. 13040  FOR J = 1 TO NR: PRINT J" "R$(J): NEXT J: PRINT 
  192. 13050  PRINT J" QUIT"
  193. 13060  PRINT J +1" CREATE A NEW DATA BASE"
  194. 13070  IF J >1  THEN  PRINT J +2" DELETE A DATA BASE"
  195. 13080  PRINT : HTAB 3
  196. 13090  INPUT "WHICH -> ";S$:S =  VAL(S$)
  197. 13100  IF S <J  THEN 13120
  198. 13110  ON S -NR GOTO 31005,13150,14010
  199. 13120  IF S <1  OR S >NR  THEN  PRINT  CHR$(7);: VTAB  PEEK(37): CALL  -868: GOTO 13090
  200. 13125  VTAB 22: HTAB 6: FLASH : PRINT "LOADING";: NORMAL : PRINT " - ONE MOMENT PLEASE"
  201. 13130 FD$ = R$(S)
  202. 13140  GOTO 4010
  203. 13150  PRINT 
  204. 13510  VTAB 20: CALL  -958
  205. 13520  IF J = 0  THEN J = 1
  206. 13525  PRINT : PRINT "MAXIMUM 10 CHARACTERS, PLEASE!"
  207. 13527  PRINT  SPC( 5);"NAME MUST START WITH A LETTER": PRINT 
  208. 13530  PRINT "NAME FOR NEW DATA BASE FILE :";: CALL 768,R$(J)
  209. 13540  IF   NOT  LEN(R$(J))  THEN 13010
  210. 13542  IF  ASC(R$(J)) <65 GOTO 13510
  211. 13544 X$ = R$(J)
  212. 13546  GOSUB 37010: REM  TEST FOR VALID NAME
  213. 13550  IF X$ = ""  THEN R$(J) = "": GOTO 13010
  214. 13554 FD$ = R$(J)
  215. 13556  PRINT D$"CREATE";PB$ +FD$
  216. 13558 NR = J: GOSUB 24010
  217. 13560 DB$ = R$(J -1): GOTO 4010
  218. 14000  REM  << GOTO FILES >>>
  219. 14010  PRINT D$;"CHAIN";PX$ +"FILES"
  220. 15000  REM  <<< GOTO REPORT ROUTINE >>>
  221. 15010 L$ = "REPORT SUBROUTINE": GOSUB 910
  222. 15020  PRINT D$;"CHAIN";PX$ +"REPORT"
  223. 23000  REM  <<<< READ FILES >>>>
  224. 23010 FF = 0: IF F$ < >"INDEX"  THEN FF = 1
  225. 23015 Q$ = PB$ +FD$ +"/" +F$
  226. 23017  IF F$ = ""  THEN Q$ = PB$ +"BASENAMES"
  227. 23020  PRINT D$"OPEN"Q$
  228. 23030  PRINT D$"READ"Q$
  229. 23040  INPUT NR
  230. 23050  FOR J = 1 TO NR
  231. 23060  ON FF GOTO 23130
  232. 23070  FOR I = 1 TO NH
  233. 23080  CALL 768,N$(J,I)
  234. 23090 L =  LEN(N$(J,I)): IF L >L%(I)  THEN L%(I) = L
  235. 23100  NEXT I
  236. 23110 R(J) = J
  237. 23120  GOTO 23140
  238. 23130  CALL 768,R$(J)
  239. 23140  NEXT J
  240. 23150  PRINT D$"CLOSE"
  241. 23160 FF = 0
  242. 23170  RETURN 
  243. 24000  REM  <<< WRITE FILES >>>
  244. 24010 NR$ =  RIGHT$("00000" + STR$(NR),5)
  245. 24020 FF = 0: IF F$ < >"INDEX"  THEN FF = 1
  246. 24030 Q$ = PB$ +FD$ +"/" +F$
  247. 24032  IF F$ = ""  THEN Q$ = PB$ +"BASENAMES"
  248. 24037  PRINT D$"CLOSE"
  249. 24040  PRINT D$"OPEN"Q$
  250. 24045  PRINT D$"WRITE"Q$
  251. 24050  PRINT NR$
  252. 24060  FOR J = 1 TO NR
  253. 24070  ON FF GOTO 24130
  254. 24080 Y = R(J)
  255. 24090  FOR I = 1 TO NH
  256. 24100  PRINT N$(Y,I)
  257. 24110  NEXT I
  258. 24120  GOTO 24140
  259. 24130  PRINT R$(J)
  260. 24140  NEXT J
  261. 24150  PRINT D$"CLOSE"
  262. 24160 FF = 0
  263. 24170  RETURN 
  264. 26000  REM  <<<< LIST RECORDS >>>
  265. 26010 L = 0:LT = 60:AR = 0: HOME :X = 0: FOR I = 1 TO NH: IF  LEN(H$(I)) >X  THEN X =  LEN(H$(I))
  266. 26020  NEXT I: IF PF  THEN  GOSUB 2100: HOME : GOTO 26040
  267. 26025  VTAB 3: PRINT "HOW DO YOU WISH TO 'LIST ALL RECORDS'?": PRINT : PRINT  TAB( 8)"1. SCREEN AT A TIME."
  268. 26030  PRINT  TAB( 8)"2. SCROLL ALL RECORDS.": PRINT : PRINT 
  269. 26035 L$ = "               WHICH ":CHOICE = 2: GOSUB 2410:AR = R -1: HOME 
  270. 26040  IF (PF)  OR (AR)  THEN  PRINT "PRESS <RETURN> TO STOP/START...": PRINT "PRESS <ESC> TO ABORT...": POKE 34,3
  271. 26045  HOME : IF PF  THEN  GOSUB 2010
  272. 26050  FOR J = 1 TO NR:Y = R(J)
  273. 26060  GOSUB 11010
  274. 26065  IF (PF)  OR (AR)  THEN 26140
  275. 26070  IF AR = 0  AND L +NH >20  THEN 26130
  276. 26080  NEXT J
  277. 26085  IF PF  THEN  PRINT  CHR$(12): POKE 34,0: HOME 
  278. 26090  PRINT D$"PR#0"
  279. 26100  IF LF  THEN LF = 0: GOTO 28010
  280. 26110  INPUT "PRESS RETURN FOR MENU...";L$
  281. 26120  GOTO 28010
  282. 26130  IF J = NR  THEN 26080
  283. 26140  GOSUB 9010
  284. 26150  IF LF  THEN J = NR
  285. 26160  GOTO 26080
  286. 28000  REM  <<< MAIN MENU >>>
  287. 28010  TEXT : GOTO 28110
  288. 28100  CALL 1013
  289. 28110  HOME 
  290. 28120  IF PF  THEN PF = 1
  291. 28140  PRINT "   *****  FILE CABINET-PRODOS *****"
  292. 28150  PRINT 
  293. 28160  PRINT "CURRENT DATA BASE:": PRINT  TAB( 16 -( LEN(FD$)/2))">>> "FD$" <<<"
  294. 28170  PRINT : PRINT "CURRENTLY CONTAINS: "NR" RECORDS": PRINT "ROOM FOR "B -NR" MORE RECORDS"
  295. 28180  PRINT 
  296. 28190  PRINT "THE PRINTER IS ";: IF   NOT PF GOTO 28200
  297. 28195  FLASH : PRINT "ON": NORMAL : GOTO 28210
  298. 28200  PRINT "OFF"
  299. 28210  PRINT 
  300. 28220  PRINT "1. SELECT DIFFERENT DATA BASE"
  301. 28230  PRINT "2. ENTER RECORDS"
  302. 28240  PRINT "3. SEARCH AND/OR CHANGE DATA"
  303. 28250  PRINT "4. DELETE RECORDS"
  304. 28260  PRINT "5. REPORT"
  305. 28270  PRINT "6. SORT >"FD$"< DATA BASE"
  306. 28280  PRINT "7. LIST ALL RECORDS"
  307. 28290  PRINT "8. TURN PRINTER ";: IF PF  THEN  PRINT "OFF": GOTO 28310
  308. 28300  PRINT "ON"
  309. 28310  PRINT "9. QUIT"
  310. 28320  PRINT 
  311. 28330  POKE 216,0: PRINT "WHICH ->  ?"
  312. 28340  VTAB 21: HTAB 11: INPUT "";MS$:MS =  VAL(MS$)
  313. 28500  IF MS <1  OR MS >9  THEN  VTAB 21: HTAB 11: CALL  -958: PRINT "?": GOTO 28340
  314. 28510  CALL  -958: IF NR  THEN 28540
  315. 28520  IF MS <3  OR MS >7  THEN 28540
  316. 28530  PRINT : PRINT " THERE ARE NO RECORDS ON FILE":MS = 0
  317. 28535  FOR Z = 1 TO 1500: NEXT Z: GOTO 28500
  318. 28540  ON MS GOTO 3050,7010,8010,12010,15010,5400,26010,29010,31005
  319. 29000  REM  <<< PRINTER FLAG >>>
  320. 29010  IF PF  THEN PF = 0:LN = 0: GOTO 29030
  321. 29020 PF = 1
  322. 29030  IF MS = 0  THEN  HOME : RETURN 
  323. 29035  VTAB 9: HTAB 16: CALL  -868: IF   NOT PF GOTO 29040
  324. 29038  FLASH : PRINT "ON": NORMAL : GOTO 29050
  325. 29040  PRINT "OFF"
  326. 29050  VTAB 18: HTAB 17: CALL  -868: IF PF  THEN  PRINT "OFF": GOTO 29070
  327. 29060  PRINT "ON"
  328. 29070 MS = 0: GOTO 28500
  329. 31000  REM  <<< QUIT ROUTINE >>>
  330. 31005  IF NR = 0  AND FD$ < >"" GOTO 38010: REM  PREVENT FILES WITH ZERO RECORDS
  331. 31010  TEXT : HOME : VTAB 10
  332. 31020  HTAB 3: PRINT "A BACKUP COPY IS RECOMMENDED AFTER      EACH CHANGE SESSION!"
  333. 31030  VTAB 15: HTAB 3
  334. 31040  PRINT "TO ACTIVATE THE PRODOS 'FILER' PROGRAM  WHICH MUST HAVE BEEN TRANSFERRED TO     THIS DISK, ANSWER 'Y' TO THE REQUEST    FOR BACKUP.": PRINT : VTAB 20
  335. 31050 L$ = "BACKUP": GOSUB 2510
  336. 31060  IF   NOT YES  THEN  TEXT : HOME : END 
  337. 31070  ONERR  GOTO 31110
  338. 31080  PRINT D$"VERIFY";PX$;"FILER"
  339. 31090  PRINT D$"-";PX$;"FILER/"
  340. 31100  END 
  341. 31110  TEXT : HOME : VTAB 10
  342. 31120  PRINT "THE PRODOS 'FILER' WAS NOT FOUND ON     PATH ";PX$;"FILER"
  343. 31130  PRINT : PRINT "IF A BACKUP COPY IS DESIRED, TAKE       CORRECTIVE ACTION AND INITIATE THE COPY PROCESS FROM 'FILER'"
  344. 31160  POKE 216,0
  345. 31170  END 
  346. 32000  REM  <<< SETUP POKES >>>
  347. 32010  FOR I = 1013 TO 1022: READ S: POKE I,S: NEXT I
  348. 32020 I = 0
  349. 32030  RETURN 
  350. 32040  DATA 104,168,104,166,223,154,72,152,72,96
  351. 33040  REM 
  352. 33075  GOSUB 60110: REM  SETUP DATE AFTER CLEAR
  353. 34000  FOR I = 1 TO 71: READ I%: POKE 768 +I -1,I%: NEXT I: RESTORE : RETURN 
  354. 34010  DATA  32,190,222,32,227,223,36,17,208,5,162,0,76,15,3,133,133,132,134,165
  355. 34020  DATA  184,164,185,133,135,132,136,32,44,213,173,0,2,201,3,208,3,76,99,216
  356. 34030  DATA  169,0,133,13,133,14,169,0,160,2,32,237,227,32,61,231,32,123,218,165
  357. 34040  DATA  135,164,136,133,184,132,185,32,183,0,96,0,0,0,0,0,0,0,0,0
  358. 35000  REM  << SET UP PATH FOR DATA >>
  359. 35010  TEXT : HOME : VTAB 5
  360. 35020  HTAB 3: INVERSE : PRINT "PATH SETUP FOR FILECABINET DATA BASE": NORMAL : PRINT 
  361. 35030  PRINT "THE CURRENT PATH FOR ACCESSING THE FILE-CABINET DATA IS ";PB$: PRINT 
  362. 35040  PRINT "IF A DIFFERENT PATH IS DESIRED, ENTER   THE PRODOS STRUCTURED PATH BELOW."
  363. 35050  PRINT "IF THE CURRENT PATH IS ACCEPTABLE,      PRESS 'RETURN' IN RESPONSE TO THE PATH  REQUEST.": PRINT 
  364. 35060  PRINT "ENTER ONLY THE NAME OF THE NEW PATH --     THE REQUIRED SLASH AT THE FIRST AND  THE END WILL BE PROVIDED AUTOMATICALLY.": PRINT 
  365. 35100  VTAB 21: PRINT "ENTER THE NEW PATH  OR PRESS 'RETURN'           ";: CALL 768,PT$
  366. 35110  IF PT$ = ""  THEN PB$ = PX$: GOTO 3090
  367. 35115  IF  ASC(PT$) <65 GOTO 35010
  368. 35120 X$ = PT$
  369. 35130  GOSUB 37010
  370. 35140  IF X$ = ""  THEN PT$ = "": GOTO 35010
  371. 35150 PB$ = "/" +PT$ +"/"
  372. 35151  ONERR  GOTO 35155
  373. 35152  PRINT D$;"VERIFY";PB$
  374. 35153  POKE 216,0: GOTO 35160
  375. 35155  VTAB 21: CALL  -958: PRINT "->-> THE NEW PATH COULD NOT BE FOUND.": PRINT 
  376. 35156  POKE 216,0:PB$ = PX$
  377. 35157  PRINT "PRESS ANY KEY TO CONTINUE ";: GET K$: GOTO 35010
  378. 35160  GOTO 3090: REM  RETURN TO MAIN STREAM
  379. 36000  END 
  380. 37000  REM  << TEST FOR VALID PRODOS NAME FORMAT >>
  381. 37010  FOR T = 1 TO  LEN(X$)
  382. 37020  IF  ASC( MID$ (X$,T,T)) >64  AND  ASC( MID$ (X$,T,T)) <91 GOTO 37090
  383. 37030  IF  ASC( MID$ (X$,T,T)) >47  AND  ASC( MID$ (X$,T,T)) <58 GOTO 37090
  384. 37040  IF  ASC( MID$ (X$,T,T)) = 46 GOTO 37090
  385. 37050  VTAB 20: CALL  -958: PRINT "FILE NAME MUST CONFORM TO PRODOS RULES"
  386. 37060  PRINT "  ONLY LETTERS, NUMERALS AND PERIODS      ARE ALLOWED"
  387. 37070 T =  LEN(X$):X$ = ""
  388. 37080  PRINT "   PRESS ANY KEY TO CONTINUE ";: GET K$
  389. 37090  NEXT T
  390. 37100  RETURN 
  391. 38000  REM  <<< ZERO RECORDS >>>
  392. 38010  HOME : VTAB 10
  393. 38020  PRINT "----  WARNING  ----": PRINT 
  394. 38030  PRINT "CREATION OF FILES WITH ZERO RECORDS     RESULTS IN ERROR CONDITIONS LATER WHEN  RE-STARTING OR DELETING."
  395. 38040  PRINT 
  396. 38050  PRINT "CREATE AT LEAST ONE RECORD WITH DATA    TO PREVENT FUTURE PROBLEMS": PRINT 
  397. 38060  PRINT "PRESS ANY KEY TO RETURN TO MAIN MENU"
  398. 38070  GET K$
  399. 38080  GOTO 28010
  400. 60000  REM  <<< READ PRODOS DATE >>>
  401. 60100 :
  402. 60110 MO$ = "???JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
  403. 60200 DD =  PEEK(49040) - INT( PEEK(49040)/32) *32
  404. 60300 YY =  INT( PEEK(49041)/2)
  405. 60400 MM = ( PEEK(49041) -YY *2) *8 + INT( PEEK(49040)/32)
  406. 60500 MM$ =  MID$ (MO$,MM *3 +1,3)
  407. 60510 TD$ = MM$ +" " + STR$(DD) +", 19" + STR$(YY)
  408. 60530  RETURN 
  409. 60590 ::::
  410. 61000  REM  *********************
  411. 61010  REM      FILE CABINET
  412. 61020  REM         PRODOS
  413. 61030  REM   --------------------
  414. 61040  REM      CONVERTED  BY 
  415. 61050  REM      MICHAEL MOORE
  416. 61060  REM        MAY 1984 
  417. 61070  REM   ====================
  418. 61080  REM       BASED  ON
  419. 61090  REM    FILE CABINET-MACH 5
  420. 61100  REM      BY ED AYMOND
  421. 61110  REM     AND BOB MATZINGER 
  422. 61120  REM     AS A MODIFICATION
  423. 61130  REM    OF EARLIER VERSIONS
  424. 61140  REM   ********************
  425. 61150  REM  APPLE CORPS OF DALLAS